0 CpxRelTRS
↳1 RelTrsToWeightedTrsProof (BOTH BOUNDS(ID, ID), 0 ms)
↳2 CpxWeightedTrs
↳3 CpxWeightedTrsRenamingProof (BOTH BOUNDS(ID, ID), 0 ms)
↳4 CpxWeightedTrs
↳5 TypeInferenceProof (BOTH BOUNDS(ID, ID), 0 ms)
↳6 CpxTypedWeightedTrs
↳7 CompletionProof (UPPER BOUND(ID), 0 ms)
↳8 CpxTypedWeightedCompleteTrs
↳9 NarrowingProof (BOTH BOUNDS(ID, ID), 0 ms)
↳10 CpxTypedWeightedCompleteTrs
↳11 CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID), 0 ms)
↳12 CpxRNTS
↳13 InliningProof (UPPER BOUND(ID), 190 ms)
↳14 CpxRNTS
↳15 SimplificationProof (BOTH BOUNDS(ID, ID), 0 ms)
↳16 CpxRNTS
↳17 CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID), 0 ms)
↳18 CpxRNTS
↳19 IntTrsBoundProof (UPPER BOUND(ID), 344 ms)
↳20 CpxRNTS
↳21 IntTrsBoundProof (UPPER BOUND(ID), 21 ms)
↳22 CpxRNTS
↳23 ResultPropagationProof (UPPER BOUND(ID), 0 ms)
↳24 CpxRNTS
↳25 IntTrsBoundProof (UPPER BOUND(ID), 632 ms)
↳26 CpxRNTS
↳27 IntTrsBoundProof (UPPER BOUND(ID), 90 ms)
↳28 CpxRNTS
↳29 FinalProof (⇔, 0 ms)
↳30 BOUNDS(1, n^1)
div2(S(S(x))) → +(S(0), div2(x))
div2(S(0)) → 0
div2(0) → 0
+(x, S(0)) → S(x)
+(S(0), y) → S(y)
div2(S(S(x))) → +(S(0), div2(x)) [1]
div2(S(0)) → 0 [1]
div2(0) → 0 [1]
+(x, S(0)) → S(x) [0]
+(S(0), y) → S(y) [0]
+ => plus |
div2(S(S(x))) → plus(S(0), div2(x)) [1]
div2(S(0)) → 0 [1]
div2(0) → 0 [1]
plus(x, S(0)) → S(x) [0]
plus(S(0), y) → S(y) [0]
div2(S(S(x))) → plus(S(0), div2(x)) [1]
div2(S(0)) → 0 [1]
div2(0) → 0 [1]
plus(x, S(0)) → S(x) [0]
plus(S(0), y) → S(y) [0]
div2 :: S:0 → S:0 S :: S:0 → S:0 plus :: S:0 → S:0 → S:0 0 :: S:0 |
(a) The obligation is a constructor system where every type has a constant constructor,
(b) The following defined symbols do not have to be completely defined, as they can never occur inside other defined symbols:
none
(c) The following functions are completely defined:
div2
plus
plus(v0, v1) → 0 [0]
Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules:
The TRS has the following type information:
Rewrite Strategy: INNERMOST |
Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules:
The TRS has the following type information:
Rewrite Strategy: INNERMOST |
0 => 0
div2(z) -{ 2 }→ plus(1 + 0, plus(1 + 0, div2(x'))) :|: z = 1 + (1 + (1 + (1 + x'))), x' >= 0
div2(z) -{ 2 }→ plus(1 + 0, 0) :|: z = 1 + (1 + (1 + 0))
div2(z) -{ 2 }→ plus(1 + 0, 0) :|: z = 1 + (1 + 0)
div2(z) -{ 1 }→ 0 :|: z = 1 + 0
div2(z) -{ 1 }→ 0 :|: z = 0
plus(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
plus(z, z') -{ 0 }→ 1 + x :|: x >= 0, z' = 1 + 0, z = x
plus(z, z') -{ 0 }→ 1 + y :|: z = 1 + 0, y >= 0, z' = y
plus(z, z') -{ 0 }→ 1 + x :|: x >= 0, z' = 1 + 0, z = x
plus(z, z') -{ 0 }→ 1 + y :|: z = 1 + 0, y >= 0, z' = y
plus(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
div2(z) -{ 2 }→ plus(1 + 0, plus(1 + 0, div2(x'))) :|: z = 1 + (1 + (1 + (1 + x'))), x' >= 0
div2(z) -{ 1 }→ 0 :|: z = 1 + 0
div2(z) -{ 1 }→ 0 :|: z = 0
div2(z) -{ 2 }→ 0 :|: z = 1 + (1 + (1 + 0)), v0 >= 0, v1 >= 0, 1 + 0 = v0, 0 = v1
div2(z) -{ 2 }→ 0 :|: z = 1 + (1 + 0), v0 >= 0, v1 >= 0, 1 + 0 = v0, 0 = v1
div2(z) -{ 2 }→ 1 + y :|: z = 1 + (1 + (1 + 0)), 1 + 0 = 1 + 0, y >= 0, 0 = y
div2(z) -{ 2 }→ 1 + y :|: z = 1 + (1 + 0), 1 + 0 = 1 + 0, y >= 0, 0 = y
plus(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
plus(z, z') -{ 0 }→ 1 + x :|: x >= 0, z' = 1 + 0, z = x
plus(z, z') -{ 0 }→ 1 + y :|: z = 1 + 0, y >= 0, z' = y
div2(z) -{ 2 }→ plus(1 + 0, plus(1 + 0, div2(z - 4))) :|: z - 4 >= 0
div2(z) -{ 1 }→ 0 :|: z = 1 + 0
div2(z) -{ 1 }→ 0 :|: z = 0
div2(z) -{ 2 }→ 0 :|: z = 1 + (1 + (1 + 0)), v0 >= 0, v1 >= 0, 1 + 0 = v0, 0 = v1
div2(z) -{ 2 }→ 0 :|: z = 1 + (1 + 0), v0 >= 0, v1 >= 0, 1 + 0 = v0, 0 = v1
div2(z) -{ 2 }→ 1 + y :|: z = 1 + (1 + (1 + 0)), 1 + 0 = 1 + 0, y >= 0, 0 = y
div2(z) -{ 2 }→ 1 + y :|: z = 1 + (1 + 0), 1 + 0 = 1 + 0, y >= 0, 0 = y
plus(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
plus(z, z') -{ 0 }→ 1 + z :|: z >= 0, z' = 1 + 0
plus(z, z') -{ 0 }→ 1 + z' :|: z = 1 + 0, z' >= 0
{ plus } { div2 } |
div2(z) -{ 2 }→ plus(1 + 0, plus(1 + 0, div2(z - 4))) :|: z - 4 >= 0
div2(z) -{ 1 }→ 0 :|: z = 1 + 0
div2(z) -{ 1 }→ 0 :|: z = 0
div2(z) -{ 2 }→ 0 :|: z = 1 + (1 + (1 + 0)), v0 >= 0, v1 >= 0, 1 + 0 = v0, 0 = v1
div2(z) -{ 2 }→ 0 :|: z = 1 + (1 + 0), v0 >= 0, v1 >= 0, 1 + 0 = v0, 0 = v1
div2(z) -{ 2 }→ 1 + y :|: z = 1 + (1 + (1 + 0)), 1 + 0 = 1 + 0, y >= 0, 0 = y
div2(z) -{ 2 }→ 1 + y :|: z = 1 + (1 + 0), 1 + 0 = 1 + 0, y >= 0, 0 = y
plus(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
plus(z, z') -{ 0 }→ 1 + z :|: z >= 0, z' = 1 + 0
plus(z, z') -{ 0 }→ 1 + z' :|: z = 1 + 0, z' >= 0
div2(z) -{ 2 }→ plus(1 + 0, plus(1 + 0, div2(z - 4))) :|: z - 4 >= 0
div2(z) -{ 1 }→ 0 :|: z = 1 + 0
div2(z) -{ 1 }→ 0 :|: z = 0
div2(z) -{ 2 }→ 0 :|: z = 1 + (1 + (1 + 0)), v0 >= 0, v1 >= 0, 1 + 0 = v0, 0 = v1
div2(z) -{ 2 }→ 0 :|: z = 1 + (1 + 0), v0 >= 0, v1 >= 0, 1 + 0 = v0, 0 = v1
div2(z) -{ 2 }→ 1 + y :|: z = 1 + (1 + (1 + 0)), 1 + 0 = 1 + 0, y >= 0, 0 = y
div2(z) -{ 2 }→ 1 + y :|: z = 1 + (1 + 0), 1 + 0 = 1 + 0, y >= 0, 0 = y
plus(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
plus(z, z') -{ 0 }→ 1 + z :|: z >= 0, z' = 1 + 0
plus(z, z') -{ 0 }→ 1 + z' :|: z = 1 + 0, z' >= 0
plus: runtime: ?, size: O(n1) [z + z'] |
div2(z) -{ 2 }→ plus(1 + 0, plus(1 + 0, div2(z - 4))) :|: z - 4 >= 0
div2(z) -{ 1 }→ 0 :|: z = 1 + 0
div2(z) -{ 1 }→ 0 :|: z = 0
div2(z) -{ 2 }→ 0 :|: z = 1 + (1 + (1 + 0)), v0 >= 0, v1 >= 0, 1 + 0 = v0, 0 = v1
div2(z) -{ 2 }→ 0 :|: z = 1 + (1 + 0), v0 >= 0, v1 >= 0, 1 + 0 = v0, 0 = v1
div2(z) -{ 2 }→ 1 + y :|: z = 1 + (1 + (1 + 0)), 1 + 0 = 1 + 0, y >= 0, 0 = y
div2(z) -{ 2 }→ 1 + y :|: z = 1 + (1 + 0), 1 + 0 = 1 + 0, y >= 0, 0 = y
plus(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
plus(z, z') -{ 0 }→ 1 + z :|: z >= 0, z' = 1 + 0
plus(z, z') -{ 0 }→ 1 + z' :|: z = 1 + 0, z' >= 0
plus: runtime: O(1) [0], size: O(n1) [z + z'] |
div2(z) -{ 2 }→ plus(1 + 0, plus(1 + 0, div2(z - 4))) :|: z - 4 >= 0
div2(z) -{ 1 }→ 0 :|: z = 1 + 0
div2(z) -{ 1 }→ 0 :|: z = 0
div2(z) -{ 2 }→ 0 :|: z = 1 + (1 + (1 + 0)), v0 >= 0, v1 >= 0, 1 + 0 = v0, 0 = v1
div2(z) -{ 2 }→ 0 :|: z = 1 + (1 + 0), v0 >= 0, v1 >= 0, 1 + 0 = v0, 0 = v1
div2(z) -{ 2 }→ 1 + y :|: z = 1 + (1 + (1 + 0)), 1 + 0 = 1 + 0, y >= 0, 0 = y
div2(z) -{ 2 }→ 1 + y :|: z = 1 + (1 + 0), 1 + 0 = 1 + 0, y >= 0, 0 = y
plus(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
plus(z, z') -{ 0 }→ 1 + z :|: z >= 0, z' = 1 + 0
plus(z, z') -{ 0 }→ 1 + z' :|: z = 1 + 0, z' >= 0
plus: runtime: O(1) [0], size: O(n1) [z + z'] |
div2(z) -{ 2 }→ plus(1 + 0, plus(1 + 0, div2(z - 4))) :|: z - 4 >= 0
div2(z) -{ 1 }→ 0 :|: z = 1 + 0
div2(z) -{ 1 }→ 0 :|: z = 0
div2(z) -{ 2 }→ 0 :|: z = 1 + (1 + (1 + 0)), v0 >= 0, v1 >= 0, 1 + 0 = v0, 0 = v1
div2(z) -{ 2 }→ 0 :|: z = 1 + (1 + 0), v0 >= 0, v1 >= 0, 1 + 0 = v0, 0 = v1
div2(z) -{ 2 }→ 1 + y :|: z = 1 + (1 + (1 + 0)), 1 + 0 = 1 + 0, y >= 0, 0 = y
div2(z) -{ 2 }→ 1 + y :|: z = 1 + (1 + 0), 1 + 0 = 1 + 0, y >= 0, 0 = y
plus(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
plus(z, z') -{ 0 }→ 1 + z :|: z >= 0, z' = 1 + 0
plus(z, z') -{ 0 }→ 1 + z' :|: z = 1 + 0, z' >= 0
plus: runtime: O(1) [0], size: O(n1) [z + z'] div2: runtime: ?, size: O(n1) [z] |
div2(z) -{ 2 }→ plus(1 + 0, plus(1 + 0, div2(z - 4))) :|: z - 4 >= 0
div2(z) -{ 1 }→ 0 :|: z = 1 + 0
div2(z) -{ 1 }→ 0 :|: z = 0
div2(z) -{ 2 }→ 0 :|: z = 1 + (1 + (1 + 0)), v0 >= 0, v1 >= 0, 1 + 0 = v0, 0 = v1
div2(z) -{ 2 }→ 0 :|: z = 1 + (1 + 0), v0 >= 0, v1 >= 0, 1 + 0 = v0, 0 = v1
div2(z) -{ 2 }→ 1 + y :|: z = 1 + (1 + (1 + 0)), 1 + 0 = 1 + 0, y >= 0, 0 = y
div2(z) -{ 2 }→ 1 + y :|: z = 1 + (1 + 0), 1 + 0 = 1 + 0, y >= 0, 0 = y
plus(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
plus(z, z') -{ 0 }→ 1 + z :|: z >= 0, z' = 1 + 0
plus(z, z') -{ 0 }→ 1 + z' :|: z = 1 + 0, z' >= 0
plus: runtime: O(1) [0], size: O(n1) [z + z'] div2: runtime: O(n1) [2 + 2·z], size: O(n1) [z] |